package Solution.problem050;

/**
 * @program Leetcode
 * @description: 我们实现一个myPow函数，这个函数有两个参数，x标识底数，n标识指数，计算出结果，返回这个结果
 * 有这么几点注意事项：
 * 1.传入的x是double类型的
 * 2.传入的n是整数，她可能是负数
 * 3.负数的情况可以加绝对值，然后，得到中间结果midResult，还得用1.0/midResult
 * 4. 负数加绝对值还要考虑，是否是INT_MIN ,否则存在越界的问题
 * 5.还有就是int的最大值和最小值可以通过Integer.MAX_VALUE和Integer.MIN_VALUE获得,获得最小值的绝对值采用+2的方式
 * @author: lishangsheng
 * @create: 2019/04/02 14:13
 */
public class Solution {
    public double myPow(double x, int n) {
        double y=x;
        if(n==0){
            return 1;
        }else{
            if(n==Integer.MIN_VALUE){
                n=n+2;
            }
            int abs=Math.abs(n);
            double temp=myPow(y,abs/2);
            if(abs%2==0){
                y=temp*temp;
            }else{
                y*=(temp*temp);
            }
            return n < 0 ? Math.max(1/y, 0.0):y;
        }
    }
}
